﻿using System;
using System.Collections.Generic;
using System.Linq;
using Rendiciones.Logica.Modelos;
using Tesla.Proveedores;
using Tesla.Excepciones;
using Rendiciones.Logica.Enumeradores;

namespace Rendiciones.Logica.Servicios
{
    public interface IServWorkFlow
    {
        List<WorkFlow> Obtener(int idRendicion);
        void Entrada(int idRendicion, EEstadoRendicion estado, DateTime? fecha, int idResponsable, int idUsuario);
        void Salida(int idRendicion, EEstadoRendicion estado, DateTime? fecha);
    }

    internal class ServWorkFlow : IServWorkFlow
    {
        private readonly IProveedor _proveedor;

        public ServWorkFlow(IProveedor provedor)
        {
            _proveedor = provedor;
        }

        public List<WorkFlow> Obtener(int idRendicion)
        {
            try
            {
                var workflows = _proveedor.Search(new WorkFlow { IdRendicion = idRendicion }).ToList();
                return workflows;
            }
            catch(NoHuboResultadosException)
            {
                return new List<WorkFlow>();
            }
        }

        public void Entrada(int idRendicion, EEstadoRendicion estado, DateTime? fecha, int idResponsable, int idUsuario)
        {
            var workflow = new WorkFlow { IdRendicion = idRendicion, FechaEntrada = fecha };
            _proveedor.Create(ref workflow, new { IdEstado = (int)estado, IdResponsable = idResponsable, IdUsuario = idUsuario });
        }

        public void Salida(int idRendicion, EEstadoRendicion estado, DateTime? fecha)
        {
            var workflow = new WorkFlow { IdRendicion = idRendicion, FechaSalida = fecha };
            _proveedor.Update<WorkFlow>(workflow, new { IdEstado = (int)estado });
        }
    }
}